'''
摆放时可以一行一行的摆
每次摆放时，只需检测这一列有没有皇后，以及它的左上方向和右上方向有没有皇后。
最后求出每种可能中的最大值。
'''
def can(x, y):
    # 遍历左上方向
    i, j = x - 1, y - 1
    while i >= 0 and j >= 0:
        if m[i][j]: return False
        j -= 1
        i -= 1
    # 遍历右上方向
    i, j = x - 1, y + 1
    while i >= 0 and j < 8:
        if m[i][j]: return False
        j += 1
        i -= 1
    return True

# 第i层，积分和
def dfs(i, sm):
    # 没错，其实yield就是相当于一个断点似的东西，你yield之后，会把值传回去
    # 然后继续运行代码是从yield的下一句开始。
    # 有yield的函数会变成一个迭代器，我们只要遍历它，就能得到yield的值了。
    if i == 8:
        yield sm
        return
    tmp = [*filter(lambda x:x > -1, a_)]
    for j in tmp:
        if can(i, j):
            # 要放置棋子的话，就把a_[j]变成-1，回溯时再重设回j
            # 这样可以保证过滤掉-1后，tmp列表就是我们可以走的列。
            a_[j] = -1
            # 然后在二维地图m上，也把m[i][j]设为True，代表这个点有棋子
            # 回溯时设为False即可。
            m[i][j] = True
            # 如果是循环的话，直接yield就行了。如果是递归的话，要在前面加yield from关键字
            # 让调试也递归一下？好像是这么个意思。总之会用就行了。还挺好玩的哈哈哈
            # 相当于有一个更深层次的return
            yield from dfs(i + 1, sm + a[i][j])
            m[i][j] = False
            a_[j] = j
    # 注意这里不用写yield from dfs(i + 1, sm)也就是不选的情况。
    # 因为如果有一行不走的话，结果肯定是小于所有行都走的！
    # 而且题目要求也是必须8个棋子都放下！
a_ = [i for i in range(8)]
m = [[False for i in range(8)] for i in range(8)]
a = [0 for i in range(8)]
for i in range(8):
    a[i] = [*map(int, input().split())]
mx = 0
# 这里遍历由yield生成的迭代器。
for i in dfs(0, 0): mx = max(i, mx)
print(mx)
# -------------------------------------------------------------------------------

# 比赛环境为python3.8.6版本自带的IDLE，最好早点熟悉一下。。这个东西的提示时有时无

# 菜单栏最右边的Help的Python Docs 比赛时候也可以看，不过建议还是提前多了解了解，

# 比赛的时候至少知道在文档找什么能用的上。

# IDLE是下载Python时自带的，在按住win+s搜索IDLE就能搜到了。

# 然后点左上角的File可以创建新文件，然后按F5可以运行。
